/**
 * 
 */
package com.wkr.action;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.wkr.bean.EmpBean;
import com.wkr.service.impl.EmpAddServiceImpl;
import com.wkr.service.impl.LoginSeviceImpl;
import com.wkr.tools.MyUtils;



// @RestController等价于@Controller和@ResponseBody
@RestController
public class RestfulAction {

	// 依赖注入【反转控制】
	// 面向接口的编程
	@Resource
	private LoginSeviceImpl loginS;// 按名称匹配进行注入
	@Resource
	private EmpAddServiceImpl EmpAdd;// 按名称匹配进行注入

	@RequestMapping(value = "/adminInfo/{empid}", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
	public ResponseEntity<List<EmpBean>> restQueryAdminInfo_GetId(@PathVariable("empid") Long empid) {
		// 调用service层进行查询操作
		EmpBean eb = new EmpBean();
		eb.setEmpId(empid);
		List<EmpBean> lstAdmins = loginS.queryInfo(eb);

		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		return ResponseEntity.status(HttpStatus.OK).body(lstAdmins);
	}

	@RequestMapping(value = "/adminInfo/", method = RequestMethod.GET)
	public ResponseEntity<List<EmpBean>> restQueryAdminInfo_GetAll() {
		// 调用service层进行查询操作
		List<EmpBean> lstAdmins = loginS.queryInfo(new EmpBean());
		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		return new ResponseEntity<List<EmpBean>>(lstAdmins, HttpStatus.OK);
	}
	
	/**
	 * 注意：如果发送的request请求的form类型是 multipart/form-data，则
	 * 参数实体不需要使用注解  @RequestBody 注解符对实体参数进行修饰，springmvc框架会自动对其按名字进行数据类型转换
	 * 会自动进行实体类的映射处理
	 */
	@RequestMapping(value = "/adminInfo/", method = RequestMethod.POST)
	public ResponseEntity<List<EmpBean>> restQueryAdminInfo_PutSave(EmpBean eb, HttpServletRequest request) {
		// 调用utils的方法，进行文件上传处理
		MyUtils.uploadFilesWithRequest(request, eb, "empImgs", "empImg");
		//System.out.println(eb);
		EmpAdd.EmpAddInfo(eb);
		// 调用service层进行查询操作
		List<EmpBean> lstAdmins = loginS.queryInfo(eb);
		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		//return new ResponseEntity<>(lstAdmins, HttpStatus.OK);
		// <> 语法用法，要求maven编译器使用的版本>=1.7，可以在项目右键--> project facets 修改java的版本
		// 也可以使用1.5的版本语法方式
		return new ResponseEntity<List<EmpBean>>(lstAdmins, HttpStatus.OK);
	}
	
	@RequestMapping(value = "/adminInfo/{empid}", method = RequestMethod.DELETE)
	public ResponseEntity<List<EmpBean>> restDeleteAdminInfo_DeleteById(
			@PathVariable("empid") Long empid) {
		// 调用service层进行逻辑删除
		int i = loginS.DeleteByID(empid);
		// 根据删除操作结果进行转发处理
		// 调用service层进行查询操作
		// 需要进行修订，查询条件应该是删除时的查询的条件
		// TODO 待优化
		List<EmpBean> lstAdmins = loginS.queryInfo(new EmpBean());
		// 直接返回查询结果集即可
		return ResponseEntity.status(HttpStatus.OK).body(lstAdmins);

	}
	
	@RequestMapping(value = "/adminInfo/{empid}", method = RequestMethod.PUT)
	public ResponseEntity<List<EmpBean>> restDeleteAdminInfo_UpdateById(@PathVariable("empid") Long empid, @RequestBody EmpBean eb ) {
		// 调用service层进行逻辑删除
		eb.setEmpId(empid);
		int i = loginS.UpdateById(eb);
		// 根据删除操作结果进行转发处理
		// 调用service层进行查询操作
		// 需要进行修订，查询条件应该是删除时的查询的条件
		List<EmpBean> lstAdmins = loginS.queryInfo(eb);
		// 直接返回查询结果集即可
		return ResponseEntity.status(HttpStatus.OK).body(lstAdmins);
	}
}